(function (factory) {
    if (typeof define === "function" && define.amd) {
        define(["jquery", "../jquery.validate"], factory);
    } else if (typeof module === "object" && module.exports) {
        module.exports = factory(require("jquery"));
    } else {
        factory(jQuery);
    }
}(function ($) {

    /*
     * Translated default messages for the jQuery validation plugin.
     * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)
     */
    $.extend($.validator.messages, {
        required: "这是必填字段",
        remote: "请修正此字段",
        email: "请输入有效的电子邮件地址",
        url: "请输入有效的网址",
        date: "请输入有效的日期",
        dateISO: "请输入有效的日期 (YYYY-MM-DD)",
        number: "请输入有效的数字",
        digits: "只能输入数字",
        creditcard: "请输入有效的信用卡号码",
        equalTo: "你的输入不相同",
        extension: "请输入有效的后缀",
        maxlength: $.validator.format("最多可以输入 {0} 个字符"),
        minlength: $.validator.format("最少要输入 {0} 个字符"),
        rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
        range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
        max: $.validator.format("请输入不大于 {0} 的数值"),
        min: $.validator.format("请输入不小于 {0} 的数值"),
        //自定义验证方法的提示信息
        stringCheck: "只能包括英文字母、数字和下划线",
        byteRangeLength: "用户名必须在4-15个字符之间(一个中文字算2个字符)",
        stringCheckForChina: "只能包括英文字母、数字、中文",
        stringCheckForOrganization:"只能包括英文字母、数字"
    });


}));
//下面几个是自定义的验证
//移动电话验证规则
jQuery.validator.addMethod("mobile", function (value, element) {
    var mobile = /^1[3|4|5|7|8]\d{9}$/;
    return this.optional(element) || (mobile.test(value));
}, "手机格式不对");
//电话验证规则
jQuery.validator.addMethod("phone", function (value, element) {
    var phone = /^0\d{2,3}-\d{7,8}$/;
    return this.optional(element) || (phone.test(value));
}, "电话格式如：0371-68787027");
//传真
jQuery.validator.addMethod("fax", function (value, element) {
    var fax = /^(\d{3,4})?[-]?\d{7,8}$/;
    return this.optional(element) || (fax.test(value));
}, "传真格式如：027-87862100");
//邮政编码验证       
jQuery.validator.addMethod("isZipCode", function (value, element) {
    var tel = /^[0-9]{6}$/;
    return this.optional(element) || (tel.test(value));
}, "请正确填写您的邮政编码");
//字符验证       
jQuery.validator.addMethod("stringCheck", function (value, element) {
    return this.optional(element) || /^[A-Za-z0-9\u4E00-\u9FA5_]+$/.test(value);
}, "只能包括英文字母、数字、中文和下划线");

jQuery.validator.addMethod("stringCheckForOrganization", function (value, element) {
    return this.optional(element) || /^[A-Za-z0-9\u4E00-\u9FA5_]+$/.test(value);
}, "只能包括英文字母、数字");

jQuery.validator.addMethod("stringCheckForChina", function (value, element) {
    return this.optional(element) || /^[\u4E00-\u9FA5A-Za-z0-9]+$/.test(value);
}, "只能包括英文字母、数字、中文");

// 中文字两个字节       
jQuery.validator.addMethod("byteRangeLength", function (value, element, param) {
    var length = value.length;
    for (var i = 0; i < value.length; i++) {
        if (value.charCodeAt(i) > 127) {
            length++;
        }
    }
    return this.optional(element) || ( length >= param[0] && length <= param[1] );
}, "请确保输入的值在4-15个字节之间(一个中文字算2个字节)");

//用户输入敏感字符的过滤 
jQuery.validator.addMethod("sql", function (value, element) {
    var str = "#|and|delete|or|exec|insert|select|union|update|count|*|'|join|>|<";
    var sqlStr = str.split("|");
    var flag = true;
    for (var i = 0; i < sqlStr.length; i++) {
        if (value.toLowerCase().indexOf(sqlStr[i]) != -1) {
            //发现符合的输入立即退出
            flag = false;
            break;
        }
    }
    return this.optional(element) || flag;
}, "字符中包含了敏感字符，请重新输入！");

jQuery.validator.addMethod("regexPassword", function (value, element) {
    return this.optional(element) || /^(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/.test(value);
}, "密码至少一个大写，一个小写，以及一个其他数字或字符");

//验证字符不能为空或者空串
jQuery.validator.addMethod("not_none", function (value, element) {
    var flag = !!(value.trim());
    return this.optional(element) || flag;
}, "不能为空");

//验证栏目不能不选
jQuery.validator.addMethod("column", function (value, element) {
    var flag = (value != (-1));
    return this.optional(element) || flag;
}, "不能为空");